package web.stu.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import web.stu.model.dto.score.AddScoreDTO;
import web.stu.model.dto.score.QueryScoreDTO;
import web.stu.model.dto.score.UpdateScoreDTO;
import web.stu.model.entity.Score;
import web.stu.model.vo.ScoreVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author administer
 * @description 针对表【score(成绩表)】的数据库操作Service
 * @createDate 2025-05-13 19:55:16
 */
public interface ScoreService extends IService<Score> {

    /**
     * 学生端查询自己成绩、条件查询成绩
     *
     * @param queryScoreDTO
     * @return
     */
    Page<ScoreVO> listAllScoresToStudent(QueryScoreDTO queryScoreDTO, HttpServletRequest request);

    /**
     * 教师端条件查询成绩
     *
     * @param queryScoreDTO
     * @param request
     * @return
     */
    Page<ScoreVO> listScoresToTeacher(QueryScoreDTO queryScoreDTO, HttpServletRequest request);

    /**
     * 添加成绩 仅教师
     *
     * @param addScoreDTO 成绩信息
     * @param request
     */
    Integer addScore(AddScoreDTO addScoreDTO, HttpServletRequest request);


    /**
     * 更新成绩
     *
     * @param updateScoreDTO 成绩信息
     */
    Integer updateScore(UpdateScoreDTO updateScoreDTO, HttpServletRequest request);


    /**
     * 删除成绩
     *
     * @param id 成绩ID
     */
    void deleteScore(Integer id);

    /**
     * 根据ID获取成绩详情
     *
     * @param id 成绩ID
     * @return 成绩详情VO
     */
    ScoreVO getScoreById(Integer id);

    /**
     * 根据学生ID查询成绩
     *
     * @param studentId 学生ID
     * @return 成绩列表
     */
    List<ScoreVO> getScoresByStudent(Integer studentId);

    /**
     * 根据课程ID查询成绩
     *
     * @param courseId 课程ID
     * @return 成绩列表
     */
    List<ScoreVO> getScoresByCourse(Integer courseId);

    /**
     * 管理员标记审核
     */
    void updateScoreByAdminAudit(UpdateScoreDTO updateScoreDTO, HttpServletRequest request);
}
